home *** CD-ROM | disk | FTP | other *** search
/ Disc to the Future 2 / Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin / MAC / '92_HACK / IR_MAN_ / ATOB.C < prev    next >
Text File  |  1992-06-07  |  2KB  |  114 lines

  1. /* Analog to Binary converter routine.
  2.    By: Mike Neil 6/6/92
  3.    
  4.    */
  5.  
  6. #include "atob.h"
  7.  
  8. #ifdef IRDEBUG
  9. #include "stdio.h"
  10. #endif
  11.  
  12. #include "Movies.h"
  13.  
  14. long
  15. AnalizeData(unsigned char *TheData, long dataSize) {
  16.     long ammount;
  17.     register long cnt;
  18.     register short delt;
  19.     register short state;
  20.     register short curChar;
  21.     short searchMode = 1;
  22.     short bitCnt;
  23.     long counter, duration;
  24.     char bits[20];
  25.     long outVal, lastVal;
  26.     long failSafeCnt;
  27.     
  28.     
  29.     state = 0;
  30.     bits[12] = 0;
  31.     bitCnt = 0;
  32.     outVal = 0;
  33.     failSafeCnt = 0;
  34.     lastVal = 0;
  35.     
  36.     for (cnt = 0; cnt < dataSize-1; cnt++) {
  37.         curChar = TheData[cnt];
  38.         
  39.         if ((curChar > 150) && (searchMode)) {
  40.             searchMode = 0;
  41. #ifdef IRDEBUG
  42.             printf("osm!\n");
  43. #endif
  44.         }
  45.             
  46.         if (!searchMode) {
  47.             if (cnt % 500L == 1)
  48.                 MoviesTask(nil, DoTheRightThing);
  49.  
  50.             delt = (TheData[cnt+1] - TheData[cnt]);
  51.             
  52.             if ((delt < 5) && (delt > -5)) {
  53.                 failSafeCnt++;
  54.                 if ((failSafeCnt > 200) && (state > 0)) {
  55.                     state = 0;
  56.                     bits[12] = 0;
  57.                     bitCnt = 0;
  58.                     outVal = 0;
  59.                     failSafeCnt = 0;
  60.                 }
  61.             }
  62.             else
  63.                 failSafeCnt = 0;
  64.                 
  65.             if ((delt > 30) && (state == 0)) {
  66.                 state = 1;
  67.                 counter = 0;
  68.             }
  69.             if ((curChar > 170) && (state == 1)) {
  70.                 counter++;
  71.             }
  72.             if ((delt < -30) && (state == 1) && (counter > 8)) {
  73.                 state = 3;
  74.                 counter = cnt;
  75.             }
  76.             if ((delt > 30) && (state == 3)) {
  77.                 state = 4;
  78.             }
  79.             if ((delt < -30) && (state == 4)) {
  80.                 duration = cnt - counter;
  81.                 state = 3;
  82.                 counter = cnt;
  83.                 if (duration > 35) {
  84.                     bits[bitCnt] = '1';
  85.                     outVal = outVal | (1L << bitCnt);
  86.                 } else
  87.                     bits[bitCnt] = '0';
  88.                 bitCnt++;
  89.                 if (bitCnt > 11) {
  90.                     state = 5;
  91. #ifdef IRDEBUG
  92.                     printf ("val : %ld\n", outVal);  */
  93. #endif
  94.                     if ((outVal == lastVal) && (outVal))
  95.                         return(outVal);
  96.                     else {
  97.                         lastVal = outVal;
  98.                     }
  99.                 }
  100.             }
  101.             if ((curChar > 80) && (state == 5)) {
  102.                 state = 0;
  103.                 bits[12] = 0;
  104.                 bitCnt = 0;
  105.                 outVal = 0;
  106.                 failSafeCnt = 0;
  107.             }
  108.         }
  109.     }
  110.     
  111.     return(0);
  112. }
  113.  
  114.